package io.renren.modules.moyuData.service.impl;

import io.renren.modules.moyuData.entity.*;
import javafx.scene.chart.Chart;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;


import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import io.renren.common.utils.PageUtils;
import io.renren.common.utils.Query;

import io.renren.modules.moyuData.dao.KmgDataDao;
import io.renren.modules.moyuData.service.KmgDataService;


@Service("kmgDataService")
public class KmgDataServiceImpl extends ServiceImpl<KmgDataDao, KmgDataEntity> implements KmgDataService {

    @Override
    public PageUtils queryPage(Map<String, Object> params) {
        IPage<KmgDataEntity> page = this.page(
                new Query<KmgDataEntity>().getPage(params),
                new QueryWrapper<KmgDataEntity>()
        );

        return new PageUtils(page);
    }

//    @Override
//    public KgmData getTest(){
//        KgmData kgmData = new KgmData();
//        kgmData.setId("123");
//        kgmData.setExperimentCondition("无敌");
//        ChartData chartData = new ChartData();
//        List<SubKgmData> subKgmData = new ArrayList<SubKgmData>();
//        SubKgmData subKgmData1 = new SubKgmData();
//        subKgmData1.setConditionName("one");
//        subKgmData1.setNumber(50.0);
//        List<Double[]> data = new ArrayList<Double[]>();
//        data.add(new Double[]{1.0,2.0});
//        data.add(new Double[]{1.0,2.0});
//        subKgmData1.setData(data);
//        subKgmData.add(subKgmData1);
//        subKgmData.add(subKgmData1);
//        chartData.setSeries(subKgmData);
//        kgmData.setChartData(chartData);
//        return kgmData;
//
//    }
    @Autowired
    KmgDataDao kmgDataDao;
//
    @Override
    public List<KgmData> getPreparationMethod(Map<String,Object> params){
        List<KgmData>list=new ArrayList<KgmData>();  //先定义要返回的list数据类型
        /**
         * 然后定义传进来的参数的值
         */
        String kgmState = (String) params.get("kgmState");
        String kgmBlendingEnvironment = (String) params.get("kgmBlendingEnvironment");
        String dataType = (String) params.get("dataType");
        Double temperature = null;
        Double ph = null;
        Double concentration = null;
        if (params.get("temperature")!=null){
            temperature = Double.parseDouble((String) params.get("temperature"));
        }
        if (params.get("ph")!=null){
            ph = Double.parseDouble((String) params.get("ph"));
        }
        if (params.get("concentration")!=null){
            concentration = Double.parseDouble((String) params.get("concentration"));
        }
        /**
         * 然后把这些获取到的参数传到Dao的方法中去获取数据库的Entity
         */
        List<KmgDataEntity>kmgDataEntityList = kmgDataDao.getPreparationMethod(kgmState,kgmBlendingEnvironment,dataType,temperature,ph,concentration);
        if (!kmgDataEntityList.isEmpty()){
            /**
             * 查询到的kmgDataEntityList不是空的话就开始分组   下面是map中的一个分组写法
             */
            Map<String,List<KmgDataEntity>>map = kmgDataEntityList.stream().collect(Collectors.groupingBy(KmgDataEntity::getId));
            map.forEach((str,sublist)->{
                /**
                 * 因为对应的一个id就会有一个对应的KmgData通过id分类来获取出每一个id的数组最后添加到list中
                 */
                KgmData kgmData = new KgmData();     //每次建立一个kgmData等最后传输会到List中
                kgmData.setId(str);           //每一个kgmData的id就是这边分组的str  然后ExperimentCondition就是每一次链表的第0个的实验条件
                kgmData.setExperimentCondition(sublist.get(0).getExperimentCondition());
                ChartData chartData = new ChartData();        //根据kgmData类中  创建一个chartData类用来最后set到kgmData类中
                List<SubKgmData> series = new ArrayList<SubKgmData>(); //创建一个subkgmdata的List对象最后添加series到chartData中
                sublist.forEach(item->{         //sublist就是KmgDataEntity的一个对象
                    SubKgmData subKgmData = new SubKgmData();   //创建一个subkgmdata对象最后用来添加到subkgmdata的list中
                    List<Double[]> data = new ArrayList<Double[]>();  //创建一个二维数组最后set到subkgmdata中
                    List<Coordinate>coordinates = kmgDataDao.getCoordinate(item.getKgmId());//获取到对应id的数据
                    coordinates.forEach(it->{
                        data.add(new Double[]{it.getX(),it.getY()});   //最后添加到data中
                    });
                    subKgmData.setData(data);
                    subKgmData.setNumber(item.getNumber());
                    subKgmData.setConditionName(item.getConditionName());
                    series.add(subKgmData);
                });
                chartData.setSeries(series);
                kgmData.setChartData(chartData);
                list.add(kgmData);
            });
        }

        return list;
    }


    @Override
    public DataXy getXy(Long kmgXyId){
        return kmgDataDao.getXy(kmgXyId);

    }


}